let callback = [];
let pending1 = false;
function flush() {
  callback.forEach((cb) => cb());
  pending1 = false;
}
let timerFunc;
if (Promise) {
  timerFunc = () => {
    Promise.resolve().then(flush);
  };
} else if (MutationObserver) {
  // h5的异步方法，他可以监听dom变化，监控完毕后来异步更新
  let observer = new MutationObserver(flush);
  let textNode = document.createTextNode(1); // 创建一个文本
  observer.observe(textNode, { characterData: true }); // 观测文本的内容，说明dom发生变化了
  timerFunc = () => {
    textNode.textContent = 2;
  };
} else if (setImmediate) {
  timerFunc = () => {
    setImmediate(flush);
  };
} else if (setTimeout) {
  setTimeout(flush, 0);
}
function nextTick(cb) {
  callback.push(cb);
  if (!pending1) {
    timerFunc(); // 这个方法就是异步方法，用来异步执行cb。但是vue2中会处理异步的兼容问题
    pending1 = true;
  }
}
